# !/usr/bin/env python
# -*- coding: utf-8 -*-
# ------------------------------
''''''

def set_mode(fuc):     # 进入外层函数时确实fuc和test指向的位置是相同的
    def te_zhang():    # 内层是个函数在第一次进入外层函数时会直接跳过，返回内层函数的引用
        print(id(fuc))
        print(id(test))
        print('------test1-------')
        print('------test2-------')
        fuc()
    return te_zhang


def test():
    print('--------功能一----------')

ret = set_mode(test)    # ret指向上面的内层函数
ret()     # 这里直接调用上面函数的内层函数


def test_(k=1):
    def print_test():
        print(k)
    return print_test

#print_test()    # error
ret = test_()
ret()  # 1

'''
总结： 在python中只要知道函数的引用，就可以调用这函数
       它是被包含函数,是不能直接用函数名去调，但可以通
       过外层函数的返回值返回内层函数的引用，再去调
       ---------------------------------------------
       而如果被（运用引用）调用的函数是内层函数，可以使
       用外层函数的局部变量（第一次执行外层函数时不消毁资源的假想）
       
       闭包的体现
'''